#ifndef TEMPERATURECHART_H
#define TEMPERATURECHART_H

#include <QWidget>
#include <QList>
#include <QPoint>
#include <QPainter>
#include <QMouseEvent>
#include <QToolTip>
#include <QFont>

// 单天温度数据结构体
struct TempData {
    QString date;       // 日期标签（如"7-25"）
    int high;           // 最高温（整数）
    int low;            // 最低温（整数）
};

class TemperatureChart : public QWidget {
    Q_OBJECT
public:
    explicit TemperatureChart(QWidget *parent = nullptr);
    
    // 设置温度数据并触发重绘
    void setData(const QList<TempData> &data);
    
    // 设置是否固定尺寸（默认自适应）
    void setFixedSizeMode(bool fixed = false, int width = 580, int height = 300);
    
protected:
    // 重写绘图事件（核心手绘逻辑）
    void paintEvent(QPaintEvent *event) override;
    // 重写鼠标移动事件（显示悬停提示）
    void mouseMoveEvent(QMouseEvent *event) override;
    // 重写大小改变事件（自适应布局）
    void resizeEvent(QResizeEvent *event) override;
    
private:
    // 绘制坐标轴、网格线和标签
    void drawAxes(QPainter &painter, const QRect &drawRect);
    // 绘制最高温/最低温折线和数据点
    void drawLines(QPainter &painter, const QRect &drawRect);
    // 绘制图例
    void drawLegend(QPainter &painter, const QRect &drawRect);
    // 计算温度值对应的Y坐标
    int tempToY(int temp, int minTemp, int maxTemp, const QRect &drawRect);
    
    // 调整字体大小，确保文本不会超出边界
    QFont adjustFontSize(const QFont &baseFont, const QString &text, 
                         const QRect &availableRect, QPainter &painter);
    
private:
    QList<TempData> m_tempList;  // 存储温度数据
    bool m_fixedSizeMode;        // 是否固定尺寸模式
    int m_fixedWidth;            // 固定宽度
    int m_fixedHeight;           // 固定高度
    double m_scaleFactor;        // 缩放因子（用于自适应）
    int m_margin;                // 边距
};

#endif // TEMPERATURECHART_H
